package mylab.starters.mybatis.config.tenant;

import lombok.Data;
import lombok.Getter;
import mylab.base.constants.DbConst;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

import java.util.Collections;
import java.util.List;

import static mylab.base.constants.DbConst.*;

/**
 * 租户配置
 */
@Getter
public class TenantProperties {
    /**
     * 多租户模式
     */
    private TenantMode mode = TenantMode.NONE;

    private String tenantTable = TENANT_TABLE_NAME;

    /**
     * COLUMN 模式的默认配置
     */
    @NestedConfigurationProperty
    private TenantProperties.Column column = new TenantProperties.Column();

    /**
     * SCHEMA 模式的默认配置
     */
    @NestedConfigurationProperty
    private TenantProperties.Schema schema = new TenantProperties.Schema();

    /**
     * DATASOURCE 模式的默认配置
     */
    @NestedConfigurationProperty
    private TenantProperties.Datasource datasource = new TenantProperties.Datasource();

    @Data
    public static class Column {

        /**
         * 多租户字段名称
         */
        private String tenantColumn = COLUMN_TENANT_ID;

        /**
         * 不含租户字段的表
         */
        private List<String> ignoreTables = Collections.singletonList(
                TENANT_TABLE_NAME
        );
    }

    @Data
    public static class Schema {

        /**
         * 租户库 前缀
         */
        private String tenantPrefix = DbConst.TENANT_SCHEMA_PREFIX;

        /**
         * 不在租户schema存储的表， 如租户表
         */
        private List<String> ignoreTables = Collections.singletonList(
                TENANT_TABLE_NAME
        );
    }

    @Data
    public static class Datasource {

        /**
         * 在租户表中存储该租户的独立数据源配置
         * 默认租户表:sys_tenant
         * 默认数据源字段：ds_config
         */
        private String dsColumn = TENANT_DATASOURCE_COLUMN_NAME;
    }
}